#include "RS485thread.h"

RS485Thread::RS485Thread(QWidget * parent, QSerialPort *SerialPort)
{
    this->parent = parent;//传入父对象，以便给它发信号
    this->SerialPort = SerialPort;//传入串口对象，以便在线程中使用
}

void RS485Thread::run()
{
    unsigned char addr = 0;

    //        //检查串口接收到了多少数据
    int num = static_cast<int>(SerialPort->bytesAvailable());

    // 接收到了23个字节，表示RS485设备有响应
    QByteArray array = SerialPort->readAll();
    //QString a1 = QString(array.toHex().toUpper());
    QString a1 = QString(array);

    QByteArray newBA;
    for(int i = 0; i<array.toHex().toUpper().length()/2;i++) //两个数字组成一个字节，每个字节后加空格
    {
        newBA.append((array.toHex().toUpper()).mid(i*2,2));
        //newBA.append(" ");
    }
    QString datr = QString(newBA);
    // qDebug()<< a1.toLatin1().toHex().toInt(0, 16);
    if(a1.length()>5) //78位
    {
        emit testString(datr);
        QString da1 = datr.mid(10,4);
        QString da2 = datr.mid(18,4);
        QString da3 = datr.mid(26,4);
        QString da4 = datr.mid(34,4);
        QString da5 = datr.mid(42,4);
        QString da6 = datr.mid(50,4);
        emit TCPSendS("01"+da1+da2+da3+da4+da5+da6);
    }
    QString str = QString().asprintf("addr=%02d, 发现设备1，返回数据量为%d",
                                     addr, static_cast<int>(num));
    emit sendResult(0, str);
    // qDebug()<<"2:  "+str;
}


////CRC校验码计算
//unsigned short CRC16(unsigned char *pBuf,unsigned short len)
//{
//    unsigned short uCRC=0xFFFF;
//    int i,j;
//    for(i=0;i<len;i++)
//    {
//        uCRC^=(*(pBuf+i));
//        for(j=0;j<8;j++)
//        {
//            if((uCRC&0x0001)==0x0001)
//            {
//                uCRC=(uCRC>>1);
//                uCRC^=0xA001;
//            }
//            else
//                uCRC=(uCRC>>1);
//        }
//    }
//    return uCRC;
//}
